/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tesis.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author hugo
 */
@Entity
@Table(name = "proceso")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = Proceso.countItems, query = "SELECT Count(p) FROM Proceso p WHERE p.idproceso = :" + Proceso.nameId),
    @NamedQuery(name = "Proceso.findAll", query = "SELECT p FROM Proceso p"),
    @NamedQuery(name = "Proceso.findByIdproceso", query = "SELECT p FROM Proceso p WHERE p.idproceso = :idproceso"),
    @NamedQuery(name = "Proceso.findByNombre", query = "SELECT p FROM Proceso p WHERE p.nombre = :nombre"),
    @NamedQuery(name = "Proceso.findByIndactivo", query = "SELECT p FROM Proceso p WHERE p.indactivo = :indactivo"),
    @NamedQuery(name = "Proceso.findByFechainstalacion", query = "SELECT p FROM Proceso p WHERE p.fechainstalacion = :fechainstalacion"),
    @NamedQuery(name = Proceso.desactivarProcesosAnt, query = "UPDATE Proceso p SET p.indactivo='I' WHERE p.version < :version and p.nombre=:nombre"),
    @NamedQuery(name = "Proceso.findByVersion", query = "SELECT p FROM Proceso p WHERE p.version = :version")})
public class Proceso implements Serializable {
    private static final long serialVersionUID = 1L;
    public static final String countItems = "Proceso.countItems";
    public static final String nameId = "idproceso";
    public static final String desactivarProcesosAnt = "Proceso.desactivarProcesosAnt";
    @Id
    @SequenceGenerator(name = "proceso_idproceso_seq", sequenceName = "proceso_idproceso_seq")
    @GeneratedValue(generator="proceso_idproceso_seq",strategy=GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idproceso", nullable = false)
    private Integer idproceso;
    @Basic(optional = false)
    @Column(name = "nombre", nullable = false, length = 30)
    private String nombre;
    @Basic(optional = false)
    @Column(name = "indactivo", nullable = false)
    private char indactivo;
    @Basic(optional = false)
    @Column(name = "fechainstalacion", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechainstalacion;
    @Basic(optional = false)
    @Column(name = "version", nullable = false)
    private int version;
    @LazyCollection(LazyCollectionOption.FALSE) 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idproceso")
    private List<Estacion> estacionList = new ArrayList<Estacion>();
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idproceso")
    private List<ConexionProcesoregla> conexionProcesoreglaList = new ArrayList<ConexionProcesoregla>();
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idproceso")
    private List<TipoDocumento> tipoDocumentoList = new ArrayList<TipoDocumento>();
    @JoinColumn(name = "idversionesproceso", referencedColumnName = "idversionesproceso", nullable = false)
    @ManyToOne(optional = false,cascade= CascadeType.ALL)
    private Versionesproceso idversionesproceso=new Versionesproceso();
    @JoinColumn(name = "idcategoriaproceso", referencedColumnName = "idcategoriaproceso", nullable = false)
    @ManyToOne(optional = false)
    private CategoriaProceso idcategoriaproceso;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idproceso")
    private List<InstanciaProceso> instanciaProcesoList = new ArrayList<InstanciaProceso>();
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idproceso")
    private List<Variable> variableList = new ArrayList<Variable>();

    public Proceso() {
    }

    public Proceso(Integer idproceso) {
        this.idproceso = idproceso;
    }

    public Proceso(Integer idproceso, String nombre, char indactivo, Date fechainstalacion, int version) {
        this.idproceso = idproceso;
        this.nombre = nombre;
        this.indactivo = indactivo;
        this.fechainstalacion = fechainstalacion;
        this.version = version;
    }

    public Integer getIdproceso() {
        return idproceso;
    }

    public void setIdproceso(Integer idproceso) {
        this.idproceso = idproceso;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public char getIndactivo() {
        return indactivo;
    }

    public void setIndactivo(char indactivo) {
        this.indactivo = indactivo;
    }

    public Date getFechainstalacion() {
        return fechainstalacion;
    }

    public void setFechainstalacion(Date fechainstalacion) {
        this.fechainstalacion = fechainstalacion;
    }

    public int getVersion() {
        return version;
    }

    public void setVersion(int version) {
        this.version = version;
    }

    @XmlTransient
    public List<Estacion> getEstacionList() {
        return estacionList;
    }

    public void setEstacionList(List<Estacion> estacionList) {
        this.estacionList = estacionList;
    }

    @XmlTransient
    public List<ConexionProcesoregla> getConexionProcesoreglaList() {
        return conexionProcesoreglaList;
    }

    public void setConexionProcesoreglaList(List<ConexionProcesoregla> conexionProcesoreglaList) {
        this.conexionProcesoreglaList = conexionProcesoreglaList;
    }

    @XmlTransient
    public List<TipoDocumento> getTipoDocumentoList() {
        return tipoDocumentoList;
    }

    public void setTipoDocumentoList(List<TipoDocumento> tipoDocumentoList) {
        this.tipoDocumentoList = tipoDocumentoList;
    }

    public Versionesproceso getIdversionesproceso() {
        return idversionesproceso;
    }

    public void setIdversionesproceso(Versionesproceso idversionesproceso) {
        this.idversionesproceso = idversionesproceso;
    }

    public CategoriaProceso getIdcategoriaproceso() {
        return idcategoriaproceso;
    }

    public void setIdcategoriaproceso(CategoriaProceso idcategoriaproceso) {
        this.idcategoriaproceso = idcategoriaproceso;
    }

    @XmlTransient
    public List<InstanciaProceso> getInstanciaProcesoList() {
        return instanciaProcesoList;
    }

    public void setInstanciaProcesoList(List<InstanciaProceso> instanciaProcesoList) {
        this.instanciaProcesoList = instanciaProcesoList;
    }

    @XmlTransient
    public List<Variable> getVariableList() {
        return variableList;
    }

    public void setVariableList(List<Variable> variableList) {
        this.variableList = variableList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idproceso != null ? idproceso.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Proceso)) {
            return false;
        }
        Proceso other = (Proceso) object;
        if ((this.idproceso == null && other.idproceso != null) || (this.idproceso != null && !this.idproceso.equals(other.idproceso))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entity.Proceso[ idproceso=" + idproceso + " ]";
    }
    
}
